<template>
  <span style="color: #ff0000; font-weight: 700">{{time}}</span>
</template>
 
<script>
  export default{
    name:'TimeCountDown',
    data () {
      return {
        time : '',
        flag : false,
        leftTime:100,
      }
    },
    mounted () {
      let time = setInterval(()=>{
        if(this.flag == true){
          clearInterval(time)
        }
        this.leftTime--
        this.timeDown()
      },1000)
    },
    props : {
      // 持续时间
      lastTime : {
        type : Number
      },
      // 第一次进入考试时间
      firstEnter:{
        type:String
      },
      // 结束时间
      endTime:{
        type:String
      }
    },
    methods : {
      timeDown () {
        let d = parseInt(this.leftTime/(24*60*60))
        let h = this.formate(parseInt(this.leftTime/(60*60)%24))
        let m = this.formate(parseInt(this.leftTime/60%60))
        let s = this.formate(parseInt(this.leftTime%60))
        if(this.leftTime <= 0){
          this.flag = true
          this.$emit('timeout')
        }
        this.time = `${d}天${h}小时${m}分${s}秒`     // 需要修改时间样式的话 ，比如需要什么30分钟倒计时，就只保留分和秒
      },
      formate (time) {
        if(time>=10){
          return time
        }else{
          return `0${time}`
        }
      }
    },
    watch:{
      //监听selectValue
      firstEnter:{
        handler(newValue,oldValue){
          // 确定把剩余时间变了
          this.leftTime = 0;
          if(this.firstEnter!=null){
            //不是第一次进入
            const endTime = new Date(this.firstEnter)
            const nowTime = new Date();
            this.leftTime = parseInt((nowTime.getTime()-endTime.getTime())/1000)
          }
          // 但是考虑考试结束时间前几分钟想考试的人，就不能用上面的方法算了
          // 加个判断
          const endTime = new Date(this.endTime);
          const nowTime = new Date(this.firstEnter);
          let maxTime = parseInt((endTime.getTime()-nowTime.getTime())/1000)
          if(this.lastTime*60>maxTime){
            // 就是实际上时间没有那么多,不够考整场了
            this.leftTime = maxTime - this.leftTime;
          }else{
            //可以在结束时间之前考完
            this.leftTime = this.lastTime*60 - this.leftTime;
          }
        }
      },
    },
  }
</script>
 
<style scoped>
</style>